﻿using log4net;
using PcaCore.DAL;
using PcaParqueos.BOL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PcaParqueos.DAL
{
    public class dVehiculoAbonado
    {
        private static ILog log = LogManager.GetLogger(typeof(dVehiculoAbonado));

        #region Public

        public static void Insert(string empresaId,
                                  string oficinaId,
                                  int tipoVehiculoId,
                                  string placa,
                                  long clienteId,
                                  long sesionId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_add_vehiculo_abonado(varchar,--empresa_id $1
                //                varchar,--oficina_id $2
                //                integer,--tipo_vehiculo_id $3
                //                varchar,--placa $4
                //                bigint,--cliente_id $5
                //                bigint --sesion_id $6
                //                )RETURNS void
                Core.ExecuteNonQuery("pca_parqueos.fn_add_vehiculo_abonado",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, tipoVehiculoId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, placa),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, clienteId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, sesionId)); 
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void Delete(string empresaId,
                                  string oficinaId,
                                  long vehiculoId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_del_vehiculo_abonado(varchar,--empresa_id $1
                //                varchar,--oficina_id $2
                //                bigint --vehiculo_id $3
                //                )RETURNS void
                Core.ExecuteNonQuery("pca_parqueos.fn_del_vehiculo_abonado",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, vehiculoId));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static oVwVehiculoAbonado Get(string empresaId,
                                             string oficinaId,
                                             long vehiculoId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_get_vehiculo_abonado(varchar,--empresa_id $1
                //                varchar,--oficina_id $2
                //                bigint --vehiculo_id $3
                //                )RETURNS SETOF pca_parqueos.vw_vehiculos_abonados
                return Core.GetObjectDb<oVwVehiculoAbonado>("pca_parqueos.fn_get_vehiculo_abonado",
                                                            new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                            new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                                            new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, vehiculoId));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static List<oVwVehiculoAbonado> GetList(int start,
                                                       int limit,
                                                       out int totalRecords,
                                                       string empresaId,
                                                       string oficinaId,
                                                       string filtro)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_parqueos.fn_get_list_vehiculos_abonados(integer,--start $1
                //                       integer,--limit $2
                //                       varchar,--empresa_id $3
                //                       varchar,--oficina_id $4
                //                       varchar --filtro(placa-nombre cliente) $5
                //                       )RETURNS SETOF pca_parqueos.vw_vehiculos_abonados
                return Core.GetListObjecstDb<oVwVehiculoAbonado>("pca_parqueos.fn_get_list_vehiculos_abonados",
                                                                 out totalRecords,
                                                                 new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                                 new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                                 new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                                 new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                                                 new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, filtro));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
    }
}
